package com.zw.a.basic.a11.demo03_map;

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;

//案例: 演示Map集合的遍历方式二: 根据键值对对象获取其对应的键和值.
/*
    具体步骤:
        1. 获取到所有的 键值对对象 的集合.            Map#entrySet(), 即:       public Set<Map.Entry<K, V>>  entrySet();  Map集合中获取所有键值对对象的方法.
        2. 遍历, 获取到每一个 键值对对象.             增强for, 迭代器
        3. 根据 键值对对象 获取其对应的键和值.        Map.Entry中的方法: getKey(), getValue()

    小细节:
        Map.Entry 是内部接口的写法, 即: Map是外部接口, Entry是Map接口中的内部接口.
 */
public class Demo05 {
    public static void main(String[] args) {
        //1.定义Map集合, 键是丈夫, 值是妻子. (键值都是字符串类型).
        HashMap<String, String> hm = new HashMap<>();
        //2.往集合中添加3对键值对元素.
        hm.put("乔峰", "阿朱");
        hm.put("虚竹", "梦姑");
        hm.put("段誉", "王语嫣");
        //3.遍历Map集合.
        //方式一: 增强for
        //3.1 获取到所有的 键值对对象 的集合.
        Set<Map.Entry<String, String>> entrys = hm.entrySet();      //需要导入: import java.util.Map;
        //Set<Entry<String, String>> entrys = hm.entrySet();        //需要导入: import java.util.Map.Entry;

        //3.2 遍历, 获取到每一个 键值对对象.
        //Map.Entry<String, String>:  就是键值对对象的数据类型
        //String                      就是字符串的数据类型
        for (Map.Entry<String, String> entry : entrys) {
            //3.3  根据 键值对对象 获取其对应的键和值.
            System.out.println(entry.getKey() + "..." + entry.getValue());
        }
        System.out.println("----------------------------");
        //方式二: 迭代器
        //3.1 获取到所有的 键值对对象 的集合.
        Iterator<Map.Entry<String, String>> it = entrys.iterator();
        //3.2 遍历, 获取到每一个 键值对对象.
        while (it.hasNext()) {
            Map.Entry<String, String> entry = it.next();
            //3.3  根据 键值对对象 获取其对应的键和值.
            System.out.println(entry.getKey() + "..." + entry.getValue());
        }

    }
}
